608060405260006007553480156200001657600080fd5b50600062000029620000cd60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620000d5565b600033905090565b614b2280620000e56000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c8063a69df4b5116100b8578063dd4670641161007c578063dd46706414610360578063e985e9c51461037c578063ee4525d5146103ac578063f242432a146103dc578063f2fde38b146103f8578063fe5830e21461041457610141565b8063a69df4b5146102bc578063b390c0ab146102c6578063b6c52324146102e2578063bdebb52514610300578063c87b56dd1461033057610141565b80632eb2c2d61161010a5780632eb2c2d6146102105780634e1273f41461022c5780636b20c4541461025c578063715018a6146102785780638da5cb5b14610282578063a22cb465146102a057610141565b8062fdd58e1461014657806301ffc9a7146101765780630e89341c146101a657806318160ddd146101d65780631b00f5de146101f4575b600080fd5b610160600480360381019061015b9190612d37565b610430565b60405161016d9190612d86565b60405180910390f35b610190600480360381019061018b9190612df9565b6104f9565b60405161019d9190612e41565b60405180910390f35b6101c060048036038101906101bb9190612e5c565b6105db565b6040516101cd9190612f19565b60405180910390f35b6101de6105ed565b6040516101eb9190612d86565b60405180910390f35b61020e600480360381019061020991906132ba565b6105f7565b005b61022a600480360381019061022591906133a5565b61096f565b005b61024660048036038101906102419190613537565b610a10565b604051610253919061366d565b60405180910390f35b6102766004803603810190610271919061368f565b610b29565b005b610280610b39565b005b61028a610c8c565b6040516102979190613729565b60405180910390f35b6102ba60048036038101906102b59190613770565b610cb5565b005b6102c4610ccb565b005b6102e060048036038101906102db91906137b0565b610e9f565b005b6102ea610eb5565b6040516102f79190612d86565b60405180910390f35b61031a60048036038101906103159190612e5c565b610ebf565b6040516103279190613729565b60405180910390f35b61034a60048036038101906103459190612e5c565b610ef2565b6040516103579190612f19565b60405180910390f35b61037a60048036038101906103759190612e5c565b610f04565b005b610396600480360381019061039191906137f0565b6110cb565b6040516103a39190612e41565b60405180910390f35b6103c660048036038101906103c19190612e5c565b61115f565b6040516103d3919061391d565b60405180910390f35b6103f660048036038101906103f1919061393f565b611339565b005b610412600480360381019061040d91906139d6565b6113da565b005b61042e60048036038101906104299190613a03565b61159b565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049790613b28565b60405180910390fd5b6003600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d457506105d3826118b1565b5b9050919050565b60606105e68261191b565b9050919050565b6000600754905090565b6105ff6119c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461068c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068390613b94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f290613c26565b60405180910390fd5b825184511461073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073690613cb8565b60405180910390fd5b60006107496119c0565b905061075a816000888888886119c8565b60005b85518110156108be5784818151811061077957610778613cd8565b5b60200260200101516003600088848151811061079857610797613cd8565b5b6020026020010151815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107fa9190613d36565b92505081905550866009600088848151811061081957610818613cd8565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506108ab86828151811061088357610882613cd8565b5b602002602001015184838151811061089e5761089d613cd8565b5b60200260200101516119d0565b80806108b690613d6a565b91505061075d565b508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8888604051610936929190613db2565b60405180910390a461094d816000888888886119f5565b8451600760008282546109609190613d36565b92505081905550505050505050565b6109776119c0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109bd57506109bc856109b76119c0565b6110cb565b5b6109fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f390613e5b565b60405180910390fd5b610a098585858585611bcc565b5050505050565b60608151835114610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90613eed565b60405180910390fd5b6000835167ffffffffffffffff811115610a7357610a72612f40565b5b604051908082528060200260200182016040528015610aa15781602001602082028036833780820191505090505b50905060005b8451811015610b1e57610aee858281518110610ac657610ac5613cd8565b5b6020026020010151858381518110610ae157610ae0613cd8565b5b6020026020010151610430565b828281518110610b0157610b00613cd8565b5b60200260200101818152505080610b1790613d6a565b9050610aa7565b508091505092915050565b610b34838383611f34565b505050565b610b416119c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590613b94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610cc7610cc06119c0565b83836121fb565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290613f7f565b60405180910390fd5b6002544211610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690613feb565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610eb1610eaa612367565b838361236f565b5050565b6000600254905090565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610efd8261191b565b9050919050565b610f0c6119c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090613b94565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426110479190613d36565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606000600a60008481526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156111f657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111ac575b505050505090506000815167ffffffffffffffff81111561121a57611219612f40565b5b60405190808252806020026020018201604052801561125357816020015b611240612c5f565b8152602001906001900390816112385790505b50905060005b825181101561132e57600083828151811061127757611276613cd8565b5b6020026020010151905060405180604001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020016003600089815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481525083838151811061130f5761130e613cd8565b5b602002602001018190525050808061132690613d6a565b915050611259565b508092505050919050565b6113416119c0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806113875750611386856113816119c0565b6110cb565b5b6113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd9061407d565b60405180910390fd5b6113d385858585856125f4565b5050505050565b6113e26119c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613b94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d59061410f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115a36119c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613b94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690613c26565b60405180910390fd5b60008151116116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da9061417b565b60405180910390fd5b60006116ed6119c0565b905061170e816000886116ff896128ca565b611708896128ca565b886119c8565b836003600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461176e9190613d36565b9250508190555061177f8587612944565b6117f857600a6000868152602001908152602001600020869080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61180285836119d0565b8573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161187992919061419b565b60405180910390a461189081600088888888612a65565b83600760008282546118a29190613d36565b92505081905550505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060086000838152602001908152602001600020805461193b906141f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611967906141f3565b80156119b45780601f10611989576101008083540402835291602001916119b4565b820191906000526020600020905b81548152906001019060200180831161199757829003601f168201915b50505050509050919050565b600033905090565b505050505050565b806008600084815260200190815260200160002090816119f091906143d0565b505050565b611a148473ffffffffffffffffffffffffffffffffffffffff16612c3c565b15611bc4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611a5a9594939291906144f7565b6020604051808303816000875af1925050508015611a9657506040513d601f19601f82011682018060405250810190611a939190614574565b60015b611b3b57611aa26145ae565b806308c379a003611afe5750611ab66145d0565b80611ac15750611b00565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af59190612f19565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b32906146d2565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb990614764565b60405180910390fd5b505b505050505050565b8151835114611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790613cb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c76906147f6565b60405180910390fd5b6000611c896119c0565b9050611c998187878787876119c8565b60005b8451811015611e9f576000858281518110611cba57611cb9613cd8565b5b602002602001015190506000858381518110611cd957611cd8613cd8565b5b6020026020010151905060006003600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290614888565b60405180910390fd5b8181036003600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816003600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e329190613d36565b92505081905550886009600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505080611e9890613d6a565b9050611c9c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611f16929190613db2565b60405180910390a4611f2c8187878787876119f5565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a9061491a565b60405180910390fd5b8051825114611fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fde90613cb8565b60405180910390fd5b6000611ff16119c0565b9050612011818560008686604051806020016040528060008152506119c8565b60005b835181101561216057600084828151811061203257612031613cd8565b5b60200260200101519050600084838151811061205157612050613cd8565b5b6020026020010151905060006003600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea906149ac565b60405180910390fd5b8181036003600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061215890613d6a565b915050612014565b50815160075461217091906149cc565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516121ed929190613db2565b60405180910390a450505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226090614a72565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161235a9190612e41565b60405180910390a3505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d59061491a565b60405180910390fd5b60006123e86119c0565b9050612418818560006123fa876128ca565b612403876128ca565b604051806020016040528060008152506119c8565b60006003600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a7906149ac565b60405180910390fd5b8281036003600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006009600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260075461256891906149cc565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516125e592919061419b565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265a906147f6565b60405180910390fd5b600061266d6119c0565b905061268d81878761267e886128ca565b612687886128ca565b876119c8565b60006003600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271c90614888565b60405180910390fd5b8381036003600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836003600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127dc9190613d36565b92505081905550856009600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516128ab92919061419b565b60405180910390a46128c1828888888888612a65565b50505050505050565b60606000600167ffffffffffffffff8111156128e9576128e8612f40565b5b6040519080825280602002602001820160405280156129175781602001602082028036833780820191505090505b509050828160008151811061292f5761292e613cd8565b5b60200260200101818152505080915050919050565b600080600a60008581526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156129da57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612990575b5050505050905060005b8151811015612a58578373ffffffffffffffffffffffffffffffffffffffff16828281518110612a1757612a16613cd8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603612a4557600192505050612a5f565b8080612a5090613d6a565b9150506129e4565b5060009150505b92915050565b612a848473ffffffffffffffffffffffffffffffffffffffff16612c3c565b15612c34578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612aca959493929190614a92565b6020604051808303816000875af1925050508015612b0657506040513d601f19601f82011682018060405250810190612b039190614574565b60015b612bab57612b126145ae565b806308c379a003612b6e5750612b266145d0565b80612b315750612b70565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b659190612f19565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba2906146d2565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614764565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cce82612ca3565b9050919050565b612cde81612cc3565b8114612ce957600080fd5b50565b600081359050612cfb81612cd5565b92915050565b6000819050919050565b612d1481612d01565b8114612d1f57600080fd5b50565b600081359050612d3181612d0b565b92915050565b60008060408385031215612d4e57612d4d612c99565b5b6000612d5c85828601612cec565b9250506020612d6d85828601612d22565b9150509250929050565b612d8081612d01565b82525050565b6000602082019050612d9b6000830184612d77565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612dd681612da1565b8114612de157600080fd5b50565b600081359050612df381612dcd565b92915050565b600060208284031215612e0f57612e0e612c99565b5b6000612e1d84828501612de4565b91505092915050565b60008115159050919050565b612e3b81612e26565b82525050565b6000602082019050612e566000830184612e32565b92915050565b600060208284031215612e7257612e71612c99565b5b6000612e8084828501612d22565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec3578082015181840152602081019050612ea8565b60008484015250505050565b6000601f19601f8301169050919050565b6000612eeb82612e89565b612ef58185612e94565b9350612f05818560208601612ea5565b612f0e81612ecf565b840191505092915050565b60006020820190508181036000830152612f338184612ee0565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f7882612ecf565b810181811067ffffffffffffffff82111715612f9757612f96612f40565b5b80604052505050565b6000612faa612c8f565b9050612fb68282612f6f565b919050565b600067ffffffffffffffff821115612fd657612fd5612f40565b5b602082029050602081019050919050565b600080fd5b6000612fff612ffa84612fbb565b612fa0565b9050808382526020820190506020840283018581111561302257613021612fe7565b5b835b8181101561304b57806130378882612d22565b845260208401935050602081019050613024565b5050509392505050565b600082601f83011261306a57613069612f3b565b5b813561307a848260208601612fec565b91505092915050565b600080fd5b600067ffffffffffffffff8211156130a3576130a2612f40565b5b6130ac82612ecf565b9050602081019050919050565b82818337600083830152505050565b60006130db6130d684613088565b612fa0565b9050828152602081018484840111156130f7576130f6613083565b5b6131028482856130b9565b509392505050565b600082601f83011261311f5761311e612f3b565b5b813561312f8482602086016130c8565b91505092915050565b600067ffffffffffffffff82111561315357613152612f40565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561317f5761317e612f40565b5b61318882612ecf565b9050602081019050919050565b60006131a86131a384613164565b612fa0565b9050828152602081018484840111156131c4576131c3613083565b5b6131cf8482856130b9565b509392505050565b600082601f8301126131ec576131eb612f3b565b5b81356131fc848260208601613195565b91505092915050565b600061321861321384613138565b612fa0565b9050808382526020820190506020840283018581111561323b5761323a612fe7565b5b835b8181101561328257803567ffffffffffffffff8111156132605761325f612f3b565b5b80860161326d89826131d7565b8552602085019450505060208101905061323d565b5050509392505050565b600082601f8301126132a1576132a0612f3b565b5b81356132b1848260208601613205565b91505092915050565b600080600080600060a086880312156132d6576132d5612c99565b5b60006132e488828901612cec565b955050602086013567ffffffffffffffff81111561330557613304612c9e565b5b61331188828901613055565b945050604086013567ffffffffffffffff81111561333257613331612c9e565b5b61333e88828901613055565b935050606086013567ffffffffffffffff81111561335f5761335e612c9e565b5b61336b8882890161310a565b925050608086013567ffffffffffffffff81111561338c5761338b612c9e565b5b6133988882890161328c565b9150509295509295909350565b600080600080600060a086880312156133c1576133c0612c99565b5b60006133cf88828901612cec565b95505060206133e088828901612cec565b945050604086013567ffffffffffffffff81111561340157613400612c9e565b5b61340d88828901613055565b935050606086013567ffffffffffffffff81111561342e5761342d612c9e565b5b61343a88828901613055565b925050608086013567ffffffffffffffff81111561345b5761345a612c9e565b5b6134678882890161310a565b9150509295509295909350565b600067ffffffffffffffff82111561348f5761348e612f40565b5b602082029050602081019050919050565b60006134b36134ae84613474565b612fa0565b905080838252602082019050602084028301858111156134d6576134d5612fe7565b5b835b818110156134ff57806134eb8882612cec565b8452602084019350506020810190506134d8565b5050509392505050565b600082601f83011261351e5761351d612f3b565b5b813561352e8482602086016134a0565b91505092915050565b6000806040838503121561354e5761354d612c99565b5b600083013567ffffffffffffffff81111561356c5761356b612c9e565b5b61357885828601613509565b925050602083013567ffffffffffffffff81111561359957613598612c9e565b5b6135a585828601613055565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135e481612d01565b82525050565b60006135f683836135db565b60208301905092915050565b6000602082019050919050565b600061361a826135af565b61362481856135ba565b935061362f836135cb565b8060005b8381101561366057815161364788826135ea565b975061365283613602565b925050600181019050613633565b5085935050505092915050565b60006020820190508181036000830152613687818461360f565b905092915050565b6000806000606084860312156136a8576136a7612c99565b5b60006136b686828701612cec565b935050602084013567ffffffffffffffff8111156136d7576136d6612c9e565b5b6136e386828701613055565b925050604084013567ffffffffffffffff81111561370457613703612c9e565b5b61371086828701613055565b9150509250925092565b61372381612cc3565b82525050565b600060208201905061373e600083018461371a565b92915050565b61374d81612e26565b811461375857600080fd5b50565b60008135905061376a81613744565b92915050565b6000806040838503121561378757613786612c99565b5b600061379585828601612cec565b92505060206137a68582860161375b565b9150509250929050565b600080604083850312156137c7576137c6612c99565b5b60006137d585828601612d22565b92505060206137e685828601612d22565b9150509250929050565b6000806040838503121561380757613806612c99565b5b600061381585828601612cec565b925050602061382685828601612cec565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61386581612cc3565b82525050565b604082016000820151613881600085018261385c565b50602082015161389460208501826135db565b50505050565b60006138a6838361386b565b60408301905092915050565b6000602082019050919050565b60006138ca82613830565b6138d4818561383b565b93506138df8361384c565b8060005b838110156139105781516138f7888261389a565b9750613902836138b2565b9250506001810190506138e3565b5085935050505092915050565b6000602082019050818103600083015261393781846138bf565b905092915050565b600080600080600060a0868803121561395b5761395a612c99565b5b600061396988828901612cec565b955050602061397a88828901612cec565b945050604061398b88828901612d22565b935050606061399c88828901612d22565b925050608086013567ffffffffffffffff8111156139bd576139bc612c9e565b5b6139c98882890161310a565b9150509295509295909350565b6000602082840312156139ec576139eb612c99565b5b60006139fa84828501612cec565b91505092915050565b600080600080600060a08688031215613a1f57613a1e612c99565b5b6000613a2d88828901612cec565b9550506020613a3e88828901612d22565b9450506040613a4f88828901612d22565b935050606086013567ffffffffffffffff811115613a7057613a6f612c9e565b5b613a7c8882890161310a565b925050608086013567ffffffffffffffff811115613a9d57613a9c612c9e565b5b613aa9888289016131d7565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613b12602b83612e94565b9150613b1d82613ab6565b604082019050919050565b60006020820190508181036000830152613b4181613b05565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b7e602083612e94565b9150613b8982613b48565b602082019050919050565b60006020820190508181036000830152613bad81613b71565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c10602183612e94565b9150613c1b82613bb4565b604082019050919050565b60006020820190508181036000830152613c3f81613c03565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613ca2602883612e94565b9150613cad82613c46565b604082019050919050565b60006020820190508181036000830152613cd181613c95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d4182612d01565b9150613d4c83612d01565b9250828201905080821115613d6457613d63613d07565b5b92915050565b6000613d7582612d01565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613da757613da6613d07565b5b600182019050919050565b60006040820190508181036000830152613dcc818561360f565b90508181036020830152613de0818461360f565b90509392505050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613e45603283612e94565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613ed7602983612e94565b9150613ee282613e7b565b604082019050919050565b60006020820190508181036000830152613f0681613eca565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000613f69602383612e94565b9150613f7482613f0d565b604082019050919050565b60006020820190508181036000830152613f9881613f5c565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000613fd5601f83612e94565b9150613fe082613f9f565b602082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000614067602983612e94565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140f9602683612e94565b91506141048261409d565b604082019050919050565b60006020820190508181036000830152614128816140ec565b9050919050565b7f496e76616c696420555249000000000000000000000000000000000000000000600082015250565b6000614165600b83612e94565b91506141708261412f565b602082019050919050565b6000602082019050818103600083015261419481614158565b9050919050565b60006040820190506141b06000830185612d77565b6141bd6020830184612d77565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061420b57607f821691505b60208210810361421e5761421d6141c4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614249565b6142908683614249565b95508019841693508086168417925050509392505050565b6000819050919050565b60006142cd6142c86142c384612d01565b6142a8565b612d01565b9050919050565b6000819050919050565b6142e7836142b2565b6142fb6142f3826142d4565b848454614256565b825550505050565b600090565b614310614303565b61431b8184846142de565b505050565b5b8181101561433f57614334600082614308565b600181019050614321565b5050565b601f8211156143845761435581614224565b61435e84614239565b8101602085101561436d578190505b61438161437985614239565b830182614320565b50505b505050565b600082821c905092915050565b60006143a760001984600802614389565b1980831691505092915050565b60006143c08383614396565b9150826002028217905092915050565b6143d982612e89565b67ffffffffffffffff8111156143f2576143f1612f40565b5b6143fc82546141f3565b614407828285614343565b600060209050601f83116001811461443a5760008415614428578287015190505b61443285826143b4565b86555061449a565b601f19841661444886614224565b60005b828110156144705784890151825560018201915060208501945060208101905061444b565b8683101561448d5784890151614489601f891682614396565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b60006144c9826144a2565b6144d381856144ad565b93506144e3818560208601612ea5565b6144ec81612ecf565b840191505092915050565b600060a08201905061450c600083018861371a565b614519602083018761371a565b818103604083015261452b818661360f565b9050818103606083015261453f818561360f565b9050818103608083015261455381846144be565b90509695505050505050565b60008151905061456e81612dcd565b92915050565b60006020828403121561458a57614589612c99565b5b60006145988482850161455f565b91505092915050565b60008160e01c9050919050565b600060033d11156145cd5760046000803e6145ca6000516145a1565b90505b90565b600060443d1061465d576145e2612c8f565b60043d036004823e80513d602482011167ffffffffffffffff8211171561460a57505061465d565b808201805167ffffffffffffffff811115614628575050505061465d565b80602083010160043d03850181111561464557505050505061465d565b61465482602001850186612f6f565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006146bc603483612e94565b91506146c782614660565b604082019050919050565b600060208201905081810360008301526146eb816146af565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061474e602883612e94565b9150614759826146f2565b604082019050919050565b6000602082019050818103600083015261477d81614741565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147e0602583612e94565b91506147eb82614784565b604082019050919050565b6000602082019050818103600083015261480f816147d3565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614872602a83612e94565b915061487d82614816565b604082019050919050565b600060208201905081810360008301526148a181614865565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614904602383612e94565b915061490f826148a8565b604082019050919050565b60006020820190508181036000830152614933816148f7565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614996602483612e94565b91506149a18261493a565b604082019050919050565b600060208201905081810360008301526149c581614989565b9050919050565b60006149d782612d01565b91506149e283612d01565b92508282039050818111156149fa576149f9613d07565b5b92915050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614a5c602983612e94565b9150614a6782614a00565b604082019050919050565b60006020820190508181036000830152614a8b81614a4f565b9050919050565b600060a082019050614aa7600083018861371a565b614ab4602083018761371a565b614ac16040830186612d77565b614ace6060830185612d77565b8181036080830152614ae081846144be565b9050969550505050505056fea2646970667358221220f60fe64b58dcf2c82b5fdb098a8b951bde0e7187048d18685a74dfe1f58a68f464736f6c63430008120033