0x60806040526040518060600160405280602f8152602001620056a2602f9139600d90816200002e9190620008b7565b506009600e556015600f553480156200004657600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601781526020017f5a4f4f2d4d414e205350454349414c2045444954494f4e0000000000000000008152506040518060400160405280600381526020017f5a534500000000000000000000000000000000000000000000000000000000008152508160029081620000db9190620008b7565b508060039081620000ed9190620008b7565b50505060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620002e5578015620001ab576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b815260040162000171929190620009e3565b600060405180830381600087803b1580156200018c57600080fd5b505af1158015620001a1573d6000803e3d6000fd5b50505050620002e4565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000265576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200022b929190620009e3565b600060405180830381600087803b1580156200024657600080fd5b505af11580156200025b573d6000803e3d6000fd5b50505050620002e3565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620002ae919062000a10565b600060405180830381600087803b158015620002c957600080fd5b505af1158015620002de573d6000803e3d6000fd5b505050505b5b5b5050620002fc6000801b336200031660201b60201c565b62000310336103e86200032c60201b60201c565b62000b48565b620003288282620004ce60201b60201c565b5050565b6200033c620005c060201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156200039d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003949062000ab4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200040f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004069062000b26565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff168152506000808201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b620004e08282620005ca60201b60201c565b620005bc576001600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005616200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000612710905090565b6000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006bf57607f821691505b602082108103620006d557620006d462000677565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200073f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000700565b6200074b868362000700565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000798620007926200078c8462000763565b6200076d565b62000763565b9050919050565b6000819050919050565b620007b48362000777565b620007cc620007c3826200079f565b8484546200070d565b825550505050565b600090565b620007e3620007d4565b620007f0818484620007a9565b505050565b5b8181101562000818576200080c600082620007d9565b600181019050620007f6565b5050565b601f82111562000867576200083181620006db565b6200083c84620006f0565b810160208510156200084c578190505b620008646200085b85620006f0565b830182620007f5565b50505b505050565b600082821c905092915050565b60006200088c600019846008026200086c565b1980831691505092915050565b6000620008a7838362000879565b9150826002028217905092915050565b620008c2826200063d565b67ffffffffffffffff811115620008de57620008dd62000648565b5b620008ea8254620006a6565b620008f78282856200081c565b600060209050601f8311600181146200092f57600084156200091a578287015190505b62000926858262000899565b86555062000996565b601f1984166200093f86620006db565b60005b82811015620009695784890151825560018201915060208501945060208101905062000942565b8683101562000989578489015162000985601f89168262000879565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009cb826200099e565b9050919050565b620009dd81620009be565b82525050565b6000604082019050620009fa6000830185620009d2565b62000a096020830184620009d2565b9392505050565b600060208201905062000a276000830184620009d2565b92915050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600062000a9c602a8362000a2d565b915062000aa98262000a3e565b604082019050919050565b6000602082019050818103600083015262000acf8162000a8d565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600062000b0e60198362000a2d565b915062000b1b8262000ad6565b602082019050919050565b6000602082019050818103600083015262000b418162000aff565b9050919050565b614b4a8062000b586000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f95780639b642de111610097578063b88d4fde11610071578063b88d4fde1461053c578063c87b56dd14610558578063d547741f14610588578063e985e9c5146105a4576101c4565b80639b642de1146104e6578063a217fddf14610502578063a22cb46514610520576101c4565b80636b1afa20116100d35780636b1afa201461044c57806370a082311461046857806391d148541461049857806395d89b41146104c8576101c4565b80636352211e146103d057806369ae9bb1146104005780636a62784214610430576101c4565b80632a55205a1161016657806336568abe1161014057806336568abe1461034a57806341f434341461036657806342842e0e146103845780634f6ccce7146103a0576101c4565b80632a55205a146102cd5780632f2ff15d146102fe5780632f745c591461031a576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd14610281578063248a9ca31461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de919061308e565b6105d4565b6040516101f091906130d6565b60405180910390f35b6102016106b6565b60405161020e9190613181565b60405180910390f35b610231600480360381019061022c91906131d9565b610748565b60405161023e9190613247565b60405180910390f35b610261600480360381019061025c919061328e565b61078e565b005b61026b6107a7565b60405161027891906132dd565b60405180910390f35b61029b600480360381019061029691906132f8565b6107b4565b005b6102b760048036038101906102b29190613381565b610803565b6040516102c491906133bd565b60405180910390f35b6102e760048036038101906102e291906133d8565b610823565b6040516102f5929190613418565b60405180910390f35b61031860048036038101906103139190613441565b610a0d565b005b610334600480360381019061032f919061328e565b610a2e565b60405161034191906132dd565b60405180910390f35b610364600480360381019061035f9190613441565b610ad3565b005b61036e610b56565b60405161037b91906134e0565b60405180910390f35b61039e600480360381019061039991906132f8565b610b68565b005b6103ba60048036038101906103b591906131d9565b610bb7565b6040516103c791906132dd565b60405180910390f35b6103ea60048036038101906103e591906131d9565b610c28565b6040516103f79190613247565b60405180910390f35b61041a600480360381019061041591906133d8565b610cae565b6040516104279190613181565b60405180910390f35b61044a600480360381019061044591906134fb565b610d7e565b005b61046660048036038101906104619190613562565b610dd6565b005b610482600480360381019061047d91906134fb565b610df6565b60405161048f91906132dd565b60405180910390f35b6104b260048036038101906104ad9190613441565b610ead565b6040516104bf91906130d6565b60405180910390f35b6104d0610f18565b6040516104dd9190613181565b60405180910390f35b61050060048036038101906104fb91906136d7565b610faa565b005b61050a610fcb565b60405161051791906133bd565b60405180910390f35b61053a6004803603810190610535919061374c565b610fd2565b005b6105566004803603810190610551919061382d565b610feb565b005b610572600480360381019061056d91906131d9565b61103c565b60405161057f9190613181565b60405180910390f35b6105a2600480360381019061059d9190613441565b61104f565b005b6105be60048036038101906105b991906138b0565b611070565b6040516105cb91906130d6565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061069f57507fda8def73000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106af57506106ae82611104565b5b9050919050565b6060600280546106c59061391f565b80601f01602080910402602001604051908101604052809291908181526020018280546106f19061391f565b801561073e5780601f106107135761010080835404028352916020019161073e565b820191906000526020600020905b81548152906001019060200180831161072157829003601f168201915b5050505050905090565b60006107538261117e565b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610798816111c9565b6107a283836112c6565b505050565b6000600a80549050905090565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107f2576107f1336111c9565b5b6107fd8484846113dd565b50505050565b6000600c6000838152602001908152602001600020600101549050919050565b6000806000600160008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036109b85760006040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006109c261143d565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866109ee919061397f565b6109f891906139f0565b90508160000151819350935050509250929050565b610a1682610803565b610a1f81611447565b610a29838361145b565b505050565b6000610a3983610df6565b8210610a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7190613a93565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610adb61153c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613b25565b60405180910390fd5b610b528282611544565b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ba657610ba5336111c9565b5b610bb1848484611626565b50505050565b6000610bc16107a7565b8210610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990613bb7565b60405180910390fd5b600a8281548110610c1657610c15613bd7565b5b90600052602060002001549050919050565b600080610c3483611646565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c90613c52565b60405180910390fd5b80915050919050565b60606000610e106201518084610cc49190613c72565b610cce91906139f0565b9050600e54811015610d0d57600d610ce585611683565b604051602001610cf6929190613dc3565b604051602081830303815290604052915050610d78565b600f548110610d4957600d610d2185611683565b604051602001610d32929190613dc3565b604051602081830303815290604052915050610d78565b600d610d5485611683565b604051602001610d65929190613e3e565b6040516020818303038152906040529150505b92915050565b6000801b610d8b81611447565b610dd2826010600081819054906101000a900461ffff1680929190610daf90613e6d565b91906101000a81548161ffff021916908361ffff16021790555061ffff16611751565b5050565b6000801b610de381611447565b610df1838361ffff1661176f565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5d90613f09565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060038054610f279061391f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f539061391f565b8015610fa05780601f10610f7557610100808354040283529160200191610fa0565b820191906000526020600020905b815481529060010190602001808311610f8357829003601f168201915b5050505050905090565b6000801b610fb781611447565b81600d9081610fc691906140b6565b505050565b6000801b81565b81610fdc816111c9565b610fe68383611903565b505050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461102957611028336111c9565b5b61103585858585611919565b5050505050565b60606110488242610cae565b9050919050565b61105882610803565b61106181611447565b61106b8383611544565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061117757506111768261197b565b5b9050919050565b6111878161198d565b6111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613c52565b60405180910390fd5b50565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156112c3576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611240929190614188565b602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128191906141c6565b6112c257806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016112b99190613247565b60405180910390fd5b5b50565b60006112d182610c28565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890614265565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661136061153c565b73ffffffffffffffffffffffffffffffffffffffff16148061138f575061138e8161138961153c565b611070565b5b6113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c5906142f7565b60405180910390fd5b6113d883836119ce565b505050565b6113ee6113e861153c565b82611a87565b61142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490614389565b60405180910390fd5b611438838383611b1c565b505050565b6000612710905090565b6114588161145361153c565b611e15565b50565b6114658282610ead565b611538576001600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506114dd61153c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b61154e8282610ead565b15611622576000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506115c761153c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b61164183838360405180602001604052806000815250610feb565b505050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60606000600161169284611e9a565b01905060008167ffffffffffffffff8111156116b1576116b06135ac565b5b6040519080825280601f01601f1916602001820160405280156116e35781602001600182028036833780820191505090505b509050600082602001820190505b600115611746578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161173a576117396139c1565b5b049450600085036116f1575b819350505050919050565b61176b828260405180602001604052806000815250611fed565b5050565b61177761143d565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc9061441b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b90614487565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff168152506000808201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b61191561190e61153c565b8383612048565b5050565b61192a61192461153c565b83611a87565b611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090614389565b60405180910390fd5b611975848484846121b4565b50505050565b600061198682612210565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166119af83611646565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a4183610c28565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611a9383610c28565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ad55750611ad48185611070565b5b80611b1357508373ffffffffffffffffffffffffffffffffffffffff16611afb84610748565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3c82610c28565b73ffffffffffffffffffffffffffffffffffffffff1614611b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8990614519565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf8906145ab565b60405180910390fd5b611c0e838383600161228a565b8273ffffffffffffffffffffffffffffffffffffffff16611c2e82610c28565b73ffffffffffffffffffffffffffffffffffffffff1614611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90614519565b60405180910390fd5b6006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e10838383600161229c565b505050565b611e1f8282610ead565b611e9657611e2c816122a2565b611e3a8360001c60206122cf565b604051602001611e4b929190614663565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d9190613181565b60405180910390fd5b5050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611ef8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611eee57611eed6139c1565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611f35576d04ee2d6d415b85acef81000000008381611f2b57611f2a6139c1565b5b0492506020810190505b662386f26fc100008310611f6457662386f26fc100008381611f5a57611f596139c1565b5b0492506010810190505b6305f5e1008310611f8d576305f5e1008381611f8357611f826139c1565b5b0492506008810190505b6127108310611fb2576127108381611fa857611fa76139c1565b5b0492506004810190505b60648310611fd55760648381611fcb57611fca6139c1565b5b0492506002810190505b600a8310611fe4576001810190505b80915050919050565b611ff7838361250b565b6120046000848484612728565b612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a9061470f565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad9061477b565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121a791906130d6565b60405180910390a3505050565b6121bf848484611b1c565b6121cb84848484612728565b61220a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122019061470f565b60405180910390fd5b50505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122835750612282826128af565b5b9050919050565b61229684848484612991565b50505050565b50505050565b60606122c88273ffffffffffffffffffffffffffffffffffffffff16601460ff166122cf565b9050919050565b6060600060028360026122e2919061397f565b6122ec919061479b565b67ffffffffffffffff811115612305576123046135ac565b5b6040519080825280601f01601f1916602001820160405280156123375781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061236f5761236e613bd7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106123d3576123d2613bd7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612413919061397f565b61241d919061479b565b90505b60018111156124bd577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061245f5761245e613bd7565b5b1a60f81b82828151811061247657612475613bd7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806124b6906147cf565b9050612420565b5060008414612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890614844565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361257a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612571906148b0565b60405180910390fd5b6125838161198d565b156125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba9061491c565b60405180910390fd5b6125d160008383600161228a565b6125da8161198d565b1561261a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126119061491c565b60405180910390fd5b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461272460008383600161229c565b5050565b60006127498473ffffffffffffffffffffffffffffffffffffffff16612aef565b156128a2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261277261153c565b8786866040518563ffffffff1660e01b81526004016127949493929190614991565b6020604051808303816000875af19250505080156127d057506040513d601f19601f820116820180604052508101906127cd91906149f2565b60015b612852573d8060008114612800576040519150601f19603f3d011682016040523d82523d6000602084013e612805565b606091505b50600081510361284a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128419061470f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a7565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061297a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061298a575061298982612b12565b5b9050919050565b61299d84848484612b8c565b60018111156129e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d890614a91565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612a2857612a2381612cb2565b612a67565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612a6657612a658582612cfb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612aa957612aa481612e68565b612ae8565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612ae757612ae68482612f39565b5b5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b855750612b8482612fb8565b5b9050919050565b6001811115612cac57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c205780600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c189190614ab1565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cab5780600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ca3919061479b565b925050819055505b5b50505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d0884610df6565b612d129190614ab1565b9050600060096000848152602001908152602001600020549050818114612df7576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a80549050612e7c9190614ab1565b90506000600b60008481526020019081526020016000205490506000600a8381548110612eac57612eab613bd7565b5b9060005260206000200154905080600a8381548110612ece57612ecd613bd7565b5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a805480612f1d57612f1c614ae5565b5b6001900381819060005260206000200160009055905550505050565b6000612f4483610df6565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61306b81613036565b811461307657600080fd5b50565b60008135905061308881613062565b92915050565b6000602082840312156130a4576130a361302c565b5b60006130b284828501613079565b91505092915050565b60008115159050919050565b6130d0816130bb565b82525050565b60006020820190506130eb60008301846130c7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561312b578082015181840152602081019050613110565b60008484015250505050565b6000601f19601f8301169050919050565b6000613153826130f1565b61315d81856130fc565b935061316d81856020860161310d565b61317681613137565b840191505092915050565b6000602082019050818103600083015261319b8184613148565b905092915050565b6000819050919050565b6131b6816131a3565b81146131c157600080fd5b50565b6000813590506131d3816131ad565b92915050565b6000602082840312156131ef576131ee61302c565b5b60006131fd848285016131c4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061323182613206565b9050919050565b61324181613226565b82525050565b600060208201905061325c6000830184613238565b92915050565b61326b81613226565b811461327657600080fd5b50565b60008135905061328881613262565b92915050565b600080604083850312156132a5576132a461302c565b5b60006132b385828601613279565b92505060206132c4858286016131c4565b9150509250929050565b6132d7816131a3565b82525050565b60006020820190506132f260008301846132ce565b92915050565b6000806000606084860312156133115761331061302c565b5b600061331f86828701613279565b935050602061333086828701613279565b9250506040613341868287016131c4565b9150509250925092565b6000819050919050565b61335e8161334b565b811461336957600080fd5b50565b60008135905061337b81613355565b92915050565b6000602082840312156133975761339661302c565b5b60006133a58482850161336c565b91505092915050565b6133b78161334b565b82525050565b60006020820190506133d260008301846133ae565b92915050565b600080604083850312156133ef576133ee61302c565b5b60006133fd858286016131c4565b925050602061340e858286016131c4565b9150509250929050565b600060408201905061342d6000830185613238565b61343a60208301846132ce565b9392505050565b600080604083850312156134585761345761302c565b5b60006134668582860161336c565b925050602061347785828601613279565b9150509250929050565b6000819050919050565b60006134a66134a161349c84613206565b613481565b613206565b9050919050565b60006134b88261348b565b9050919050565b60006134ca826134ad565b9050919050565b6134da816134bf565b82525050565b60006020820190506134f560008301846134d1565b92915050565b6000602082840312156135115761351061302c565b5b600061351f84828501613279565b91505092915050565b600061ffff82169050919050565b61353f81613528565b811461354a57600080fd5b50565b60008135905061355c81613536565b92915050565b600080604083850312156135795761357861302c565b5b600061358785828601613279565b92505060206135988582860161354d565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135e482613137565b810181811067ffffffffffffffff82111715613603576136026135ac565b5b80604052505050565b6000613616613022565b905061362282826135db565b919050565b600067ffffffffffffffff821115613642576136416135ac565b5b61364b82613137565b9050602081019050919050565b82818337600083830152505050565b600061367a61367584613627565b61360c565b905082815260208101848484011115613696576136956135a7565b5b6136a1848285613658565b509392505050565b600082601f8301126136be576136bd6135a2565b5b81356136ce848260208601613667565b91505092915050565b6000602082840312156136ed576136ec61302c565b5b600082013567ffffffffffffffff81111561370b5761370a613031565b5b613717848285016136a9565b91505092915050565b613729816130bb565b811461373457600080fd5b50565b60008135905061374681613720565b92915050565b600080604083850312156137635761376261302c565b5b600061377185828601613279565b925050602061378285828601613737565b9150509250929050565b600067ffffffffffffffff8211156137a7576137a66135ac565b5b6137b082613137565b9050602081019050919050565b60006137d06137cb8461378c565b61360c565b9050828152602081018484840111156137ec576137eb6135a7565b5b6137f7848285613658565b509392505050565b600082601f830112613814576138136135a2565b5b81356138248482602086016137bd565b91505092915050565b600080600080608085870312156138475761384661302c565b5b600061385587828801613279565b945050602061386687828801613279565b9350506040613877878288016131c4565b925050606085013567ffffffffffffffff81111561389857613897613031565b5b6138a4878288016137ff565b91505092959194509250565b600080604083850312156138c7576138c661302c565b5b60006138d585828601613279565b92505060206138e685828601613279565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061393757607f821691505b60208210810361394a576139496138f0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061398a826131a3565b9150613995836131a3565b92508282026139a3816131a3565b915082820484148315176139ba576139b9613950565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139fb826131a3565b9150613a06836131a3565b925082613a1657613a156139c1565b5b828204905092915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613a7d602b836130fc565b9150613a8882613a21565b604082019050919050565b60006020820190508181036000830152613aac81613a70565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613b0f602f836130fc565b9150613b1a82613ab3565b604082019050919050565b60006020820190508181036000830152613b3e81613b02565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613ba1602c836130fc565b9150613bac82613b45565b604082019050919050565b60006020820190508181036000830152613bd081613b94565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613c3c6018836130fc565b9150613c4782613c06565b602082019050919050565b60006020820190508181036000830152613c6b81613c2f565b9050919050565b6000613c7d826131a3565b9150613c88836131a3565b925082613c9857613c976139c1565b5b828206905092915050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613cd08161391f565b613cda8186613ca3565b94506001821660008114613cf55760018114613d0a57613d3d565b60ff1983168652811515820286019350613d3d565b613d1385613cae565b60005b83811015613d3557815481890152600182019150602081019050613d16565b838801955050505b50505092915050565b6000613d51826130f1565b613d5b8185613ca3565b9350613d6b81856020860161310d565b80840191505092915050565b7f2f6d6f726e696e672e6a736f6e00000000000000000000000000000000000000600082015250565b6000613dad600d83613ca3565b9150613db882613d77565b600d82019050919050565b6000613dcf8285613cc3565b9150613ddb8284613d46565b9150613de682613da0565b91508190509392505050565b7f2f6e696768742e6a736f6e000000000000000000000000000000000000000000600082015250565b6000613e28600b83613ca3565b9150613e3382613df2565b600b82019050919050565b6000613e4a8285613cc3565b9150613e568284613d46565b9150613e6182613e1b565b91508190509392505050565b6000613e7882613528565b915061ffff8203613e8c57613e8b613950565b5b600182019050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613ef36029836130fc565b9150613efe82613e97565b604082019050919050565b60006020820190508181036000830152613f2281613ee6565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613f767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f39565b613f808683613f39565b95508019841693508086168417925050509392505050565b6000613fb3613fae613fa9846131a3565b613481565b6131a3565b9050919050565b6000819050919050565b613fcd83613f98565b613fe1613fd982613fba565b848454613f46565b825550505050565b600090565b613ff6613fe9565b614001818484613fc4565b505050565b5b818110156140255761401a600082613fee565b600181019050614007565b5050565b601f82111561406a5761403b81613cae565b61404484613f29565b81016020851015614053578190505b61406761405f85613f29565b830182614006565b50505b505050565b600082821c905092915050565b600061408d6000198460080261406f565b1980831691505092915050565b60006140a6838361407c565b9150826002028217905092915050565b6140bf826130f1565b67ffffffffffffffff8111156140d8576140d76135ac565b5b6140e2825461391f565b6140ed828285614029565b600060209050601f831160018114614120576000841561410e578287015190505b614118858261409a565b865550614180565b601f19841661412e86613cae565b60005b8281101561415657848901518255600182019150602085019450602081019050614131565b86831015614173578489015161416f601f89168261407c565b8355505b6001600288020188555050505b505050505050565b600060408201905061419d6000830185613238565b6141aa6020830184613238565b9392505050565b6000815190506141c081613720565b92915050565b6000602082840312156141dc576141db61302c565b5b60006141ea848285016141b1565b91505092915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061424f6021836130fc565b915061425a826141f3565b604082019050919050565b6000602082019050818103600083015261427e81614242565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b60006142e1603d836130fc565b91506142ec82614285565b604082019050919050565b60006020820190508181036000830152614310816142d4565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614373602d836130fc565b915061437e82614317565b604082019050919050565b600060208201905081810360008301526143a281614366565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000614405602a836130fc565b9150614410826143a9565b604082019050919050565b60006020820190508181036000830152614434816143f8565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006144716019836130fc565b915061447c8261443b565b602082019050919050565b600060208201905081810360008301526144a081614464565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006145036025836130fc565b915061450e826144a7565b604082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145956024836130fc565b91506145a082614539565b604082019050919050565b600060208201905081810360008301526145c481614588565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614601601783613ca3565b915061460c826145cb565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061464d601183613ca3565b915061465882614617565b601182019050919050565b600061466e826145f4565b915061467a8285613d46565b915061468582614640565b91506146918284613d46565b91508190509392505050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006146f96032836130fc565b91506147048261469d565b604082019050919050565b60006020820190508181036000830152614728816146ec565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006147656019836130fc565b91506147708261472f565b602082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b60006147a6826131a3565b91506147b1836131a3565b92508282019050808211156147c9576147c8613950565b5b92915050565b60006147da826131a3565b9150600082036147ed576147ec613950565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061482e6020836130fc565b9150614839826147f8565b602082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061489a6020836130fc565b91506148a582614864565b602082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614906601c836130fc565b9150614911826148d0565b602082019050919050565b60006020820190508181036000830152614935816148f9565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006149638261493c565b61496d8185614947565b935061497d81856020860161310d565b61498681613137565b840191505092915050565b60006080820190506149a66000830187613238565b6149b36020830186613238565b6149c060408301856132ce565b81810360608301526149d28184614958565b905095945050505050565b6000815190506149ec81613062565b92915050565b600060208284031215614a0857614a0761302c565b5b6000614a16848285016149dd565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000614a7b6035836130fc565b9150614a8682614a1f565b604082019050919050565b60006020820190508181036000830152614aaa81614a6e565b9050919050565b6000614abc826131a3565b9150614ac7836131a3565b9250828203905081811115614adf57614ade613950565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122007de982627ee7c63aadfdde550047ae15df0778e444bd32d79242f168fcd97a364736f6c6343000811003368747470733a2f2f7a6f6f2d6d616e2e636f6d2f6e66746d657461646174612f7370656369616c65646974696f6e2f